# Capture

> Write it down with where it came from, and decide nothing yet.

**Capture records that something arrived, and decides nothing about it.** It produces a capture: the words as they came, their source and when they arrived. It is the cheapest move in the method and has to stay that way, because anything that costs thought at capture time is something that does not get captured.

## How to do it

A capture holds:

- **Its source,** such as `email`, `github_webhook`, `discord` or `manual`. This is the one required field.
- **The source's own data, verbatim.** Nothing is summarised or cleaned up on the way in. A summary is a reading, and reading belongs to [Clarify](https://flow.ttoss.dev/docs/method/clarify.md).
- **When it arrived.**
- **Where it came from, as links.** The Discord message, the page, the thread. Clarifying copies each link onto the task it makes.
- **Optionally, a suggested project.** A hint that triage may take or ignore, never a decision.

A capture is immutable. Clarifying it creates a new record that points back to it, and the capture stays exactly as it arrived.

The one judgement at capture time is whether to capture at all. If the thing has already been decided, it is not a capture: "Add a task to Billing: rotate the Stripe key by Friday" names a project and a commitment, so it is written straight as a task in the status it was given. What makes something a task is the decision, not how complete the data is.

## The person

- **Capture whenever it occurs to you,** in whatever words come. "Capture: call the accountant about the Q3 filing" is a whole capture.
- **Don't sort while capturing.** The project, the status and the priority can all wait.
- **Wire your inputs in once.** An email address or a webhook from your own app can post straight into your inbox through an [ingest endpoint](https://flow.ttoss.dev/docs/examples/an-endpoint-for-an-app.md), and nothing that posts there can read anything back.
- **In Discord, save the message itself.** Right-click it, then **Apps → Save to Flow**. The message lands in your inbox as it was written, with a link back to it, once your Discord account is linked to Flow.

The agent's side is the protocol: [GTF-C1 to GTF-C4](https://flow.ttoss.dev/docs/agents/protocol.md#capture).

## Failure modes

- **Classifying at capture time.** An agent that writes "P1 bug, Billing, active" has made three decisions nobody asked for. Write the words, `incubated`, and let Clarify decide.
- **Capturing a two-minute job.** If you are the one doing it and it takes less time than clarifying it would, do it and don't capture it at all.
- **Rewriting a capture.** A capture that turned out to be wrong is clarified into `discarded`. It is never edited to say something else.
- **Capturing instead of telling.** Something urgent that only went into the inbox waits there until somebody looks.

## In Flow

| To                                                         | Call                                                               |
| ---------------------------------------------------------- | ------------------------------------------------------------------ |
| Capture something undecided                                | [`ingest-capture`](https://flow.ttoss.dev/docs/reference/ingest-capture.md)                 |
| See the inbox                                              | [`list-captures`](https://flow.ttoss.dev/docs/reference/list-captures.md)                   |
| Write a task the person already decided on                 | [`upsert-tasks`](https://flow.ttoss.dev/docs/reference/upsert-tasks.md)                     |
| Give an app, a mailbox or a bot its own URL into the inbox | [`create-ingest-endpoint`](https://flow.ttoss.dev/docs/reference/create-ingest-endpoint.md) |

The inbox is personal: there is no shared inbox, and the graph never contains a capture. [`get-next`](https://flow.ttoss.dev/docs/reference/get-next.md), [`get-order`](https://flow.ttoss.dev/docs/reference/get-order.md) and every other graph read ignore the inbox, so an overflowing inbox never slows down or distorts the work you have actually committed to.

**Examples:**

- [Capture now, decide later](https://flow.ttoss.dev/docs/examples/capture-then-triage.md) runs this move and Clarify against a live server, step by step.
- [An endpoint your app posts to](https://flow.ttoss.dev/docs/examples/an-endpoint-for-an-app.md): what an app sends lands in the inbox as a capture, and nothing is decided.
