# Chats versus tasks

> This is the question new users ask most. After this page you'll know which one to reach for every time.

## In one line

- **A chat is a one-on-one conversation.** The AI works on one chat at a time, so chats **queue** behind one another. Good for "let's just try it" changes.
- **A task is a group chat.** Several chats push the same larger piece of work forward **in parallel**, and it all merges into the default branch at the end.

## Side by side

| Dimension | Chat | Task |
|-----------|------|------|
| Has a title | no (the first message is the preview) | yes |
| Concurrency | chats **queue** behind one another | chats inside a task run **in parallel** |
| Statuses | Waiting / Running / Done / Stopped | Not started / In progress / Suspended / Finished |
| Bound to an app | yes (chosen at creation) | yes |
| Has a "main version" | no — branches straight off the **app main version** | yes — its own **task main version**, where every chat merges first |
| Merges into | the app main version | the task main version, then the app main version |
| Typical duration | minutes to tens of minutes | hours to days, over several sittings |
| Where to start | [Chat](#/chats) in the sidebar | [Tasks](#/tasks) in the sidebar |

## How they behave differently

### Creating

- **Chat**: type in the input box on [Chat](#/chats), pick an app, send. **No task needed first.**
- **Task**: on [Tasks](#/tasks), click *+ New task* and fill in a title and description.

### Output

- Chats **do not stream** at the moment: after you send, the status shows `Running…`, and the result appears on the right all at once when the run finishes (until then it's three bouncing dots)
- To follow progress, watch the status badge on the chat list on the left

### Interrupting

- Chats can't be suspended, but they can be **stopped** — that just sets an "interrupted" marker in the UI so you can send another message and carry on. The agent picks up where it left off when the new message arrives.
- Tasks can be **suspended** with all their context intact, and resumed whenever you want.

### Merge buttons

- A chat's detail view has *Merge into app main version*, *Preview*, *Send* and *Stop*.
- A chat inside a task gets one more: *Merge into task main version*, which folds the change into the task's long-lived branch.

## Choosing

```
┌─ Will this take several sittings? ─┐
│                                    │
yes                                  no
│                                    │
▼                                    ▼
Task                                Chat
│                                    │
│              ┌─ Ship it right away? ─┐
│             yes                     no
│              │                       │
│              ▼                       ▼
│      merge into main       keep iterating / stop
▼
new task → several chats → task main version → merge once
```

## Worked examples

**Scenario A**: there's a typo on the homepage.
→ Go to [Chat](#/chats), type "change xxx on the homepage to yyy", merge when it's done.

**Scenario B**: you want to refactor the whole login module — 10+ files, roughly three days.
→ Go to [Tasks](#/tasks) and create a task with the goal and acceptance criteria. Then open several chats under it for "refactor the store", "refactor the UI", "add unit tests" and so on. Merge each chat into the task main version as it finishes, and merge the task main version into the app main version at the end.

## Common questions

**Q: Can I "upgrade" an existing chat into a task?**
A: Not yet. When you realise the work is bigger than you thought, create a task early.

**Q: Can I recover a chat after stopping it?**
A: Yes. Stopping only sets an "interrupted" marker in the UI — the chat isn't destroyed. Send another message and the agent carries on; the context and the branch are both still there.

**Q: Will chats inside one task conflict with each other?**
A: Each chat works on its own branch and merges into the task main version. If there's a conflict, the AI flags it and handles it during the merge.

Read next: `05-misc.md`
