---
title: "Threads"
description: "The conversation UI: runs, approvals, queueing, attachments, and the PR rail"
canonical_url: "https://hoplite.sh/docs/threads"
markdown_url: "https://hoplite.sh/docs/threads.md"
---

# Threads
URL: /docs/threads
LLM index: /llms.txt
Description: The conversation UI: runs, approvals, queueing, attachments, and the PR rail
Related: /docs/agent/slash-commands, /docs/github, /docs/sandboxes/previews

# Threads

A **thread** is a single conversation and task against a project. Each thread gets its own [sandbox](/docs/sandboxes), its own diff, and its own pull requests. Within a thread, each of your messages kicks off a **run** — one agent execution turn.

## Lifecycle

Thread statuses reflect where the work stands:

| Status | Meaning |
| --- | --- |
| `queued` | A run is waiting to start |
| `running` | The agent is actively working |
| `waiting` | The agent is paused — usually waiting on your approval or input |
| `blocked` | The run can't proceed without you |
| `ready` | The agent finished and is waiting for your next message |
| `failed` | The last run errored (you can retry from the last checkpoint) |
| `archived` | The thread is closed out |

## The activity timeline

Tool calls stream into the thread as they happen: file reads and edits, shell commands, browser actions, GitHub operations. Each entry carries a short human-readable description of what the agent is doing and why. Mid-run reasoning and narration fold into the timeline so long runs stay scannable.

A **context gauge** shows how much of the model's context window the thread has used. When it fills up, `/compact` summarizes older context to free tokens.

## Approvals

Sensitive tools pause and ask before they execute: file writes and edits, patches, shell commands, killing processes, sandbox restarts and downsizes, and PR-mutating GitHub actions (creating, commenting, merging, resolving review threads). Pending approvals surface in an inline bar — approve or deny each one without leaving the conversation.

## Sending messages while the agent works

You don't have to wait for a run to finish:

- **Queued messages** — messages sent mid-run stack up in a **Queued** panel above the composer and are applied in order once the current run completes. You can remove a queued message before it runs.
- **Stop and steer** — `/stop` halts the current run immediately; your next message takes over from there.
- **Retry** — `/retry` re-runs from the last checkpoint after a failure or a wrong turn.

## Attachments

Drop, paste, or pick files in the composer:

- Up to **10 attachments per message**, **50 MB each**
- Images render inline and are passed to the model as vision input (on models that support images)
- Other file types attach as links the agent can read from the sandbox
- Long text pastes automatically convert to a `.txt` attachment so they don't flood the conversation

## Titles and notes

Thread titles are generated automatically from the conversation. Use `/rename <new title>` to override, and `/note <text>` to pin a note to the thread — handy for context the whole team should see.

## Cost

Each thread shows a running cost chip, and every run's token usage is attributed on the [usage page](/docs/billing#usage). Runs reserve credits while in flight and settle to actual usage when they finish.

## Previews and terminal

When the agent starts your app, a **Preview panel** shows it live inside the thread, and a **Terminal panel** gives you a shell into the sandbox. See [Previews](/docs/sandboxes/previews).

## Pull requests

The **PR rail** slides out alongside the conversation with the PR's checks, reviews, and unresolved comments — including an "Add all to chat" action that hands reviewer feedback straight to the agent. See [GitHub & pull requests](/docs/github).

## Sitemap

See the full [sitemap](/docs/sitemap.md) for all pages.
Well-known sitemap: [/docs/.well-known/sitemap.md](/docs/.well-known/sitemap.md).
