> ## Documentation Index
> Fetch the complete documentation index at: https://docs.auto.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Binding

> Spawn once, bind to an artifact, and route follow-ups back into the same session.

Binding is how one session owns an artifact — a pull request, Slack thread, Linear issue — so follow-up events fold into the same conversational memory instead of spawning duplicates. See [routing](/concepts/routing) for when to use `bind` versus `deliver`, and [triggers and events](/concepts/triggers-and-events) for bind-at-spawn and folding mechanics.

The chat assistant pattern is the canonical spawn/deliver split around a thread binding:

```yaml theme={null}
triggers:
  # First mention: spawn and bind the thread.
  - event: chat.message.mentioned
    connection: slack
    where:
      $.auto.authored: false
      $.auto.attributions:
        exists: false
    message: |
      A user mentioned the chat assistant:

      {{message.text}}

      Reply in this thread as the same assistant and preserve the conversation context.
    routing:
      kind: spawn
      bind:
        target: slack.thread
  # Replies: deliver into the session already attributed to the thread.
  - events:
      - chat.message.mentioned
      - chat.message.subscribed
    connection: slack
    where:
      $.auto.authored: false
      $.auto.attributions:
        exists: true
    message: |
      A user continued the chat assistant conversation:

      {{message.text}}

      Continue as the same assistant and reply in this thread using the existing context.
    routing:
      kind: deliver
      routeBy:
        kind: attributedSessions
      onUnmatched: drop
```

Reach for binding when follow-ups need context: a conversation, a PR that accumulates review feedback, an issue with a back-and-forth. [Chat assistant](/examples/chat-assistant) is the purest demonstration; [handoff](/examples/handoff) applies it to PR ownership, and [code review](/examples/code-review) uses `bind` with `onUnmatched: spawn` so one reviewer session owns a PR across pushes instead of spawning a fresh review per head.

Agents can also bind and release targets at runtime with `auto.bind` and `auto.unbind`. Session bindings are durable until explicitly released — see [sessions](/concepts/sessions).
