# `T3.Threads`
[🔗](https://github.com/dl-alexandre/t3-elixir/blob/main/lib/t3/threads.ex#L1)

Thread MCP operations with original string-keyed arguments.

Outside clients have no implicit project: supply `projectId` where required.
Every operation also has an exact wire-name counterpart in `T3.Tools`.
Existing ID/message convenience signatures remain available.

# `configure`

```elixir
@spec configure(T3.Client.t(), map()) :: {:ok, map()} | {:error, T3.Error.t()}
```

Read a thread's provider, model, and modes, or set its provider, model, and options with `modelSelection`. Omit `threadId` for this thread. Permission modes stay. Values from `orchestrator_capabilities`.

Availability is server-, permission-, and context-dependent; outside clients must supply explicit project/thread targets when required.

# `create_many`

```elixir
@spec create_many(T3.Client.t(), map()) :: {:ok, map()} | {:error, T3.Error.t()}
```

Create new top-level threads in this checkout. Not delegation. One thread or its own worktree: `t3_thread_launch`. Project, branch, and worktree inherit.

Availability is server-, permission-, and context-dependent; outside clients must supply explicit project/thread targets when required.

# `interrupt`

# `interrupt`

# `launch`

# `launch`

# `list`

# `organize`

```elixir
@spec organize(T3.Client.t(), map()) :: {:ok, map()} | {:error, T3.Error.t()}
```

Pin, snooze, settle, archive, or mark a thread unread. Omit `threadId` for this thread. `snooze` needs `snoozedUntil`. Settling this thread applies at turn end. A failed turn or queued message leaves it active.

Availability is server-, permission-, and context-dependent; outside clients must supply explicit project/thread targets when required.

# `read`

# `read`

# `search`

# `search`

# `send`

# `send`

# `transfer`

```elixir
@spec transfer(T3.Client.t(), map()) :: {:ok, map()} | {:error, T3.Error.t()}
```

Move context between threads. Omit `threadId` for this thread. fork: copy it from `sourcePoint` (default latest stable run) into a new thread with the same setup; no turn runs yet. merge_back: merge it from `sourcePoint` into a related `targetThreadId` in the same project. status: its context transfers.

Availability is server-, permission-, and context-dependent; outside clients must supply explicit project/thread targets when required.

# `update`

```elixir
@spec update(T3.Client.t(), map()) :: {:ok, map()} | {:error, T3.Error.t()}
```

Rename a thread (`action:'rename'` with `title`) or regenerate its title. Omit `threadId` for this thread. Workspace and branch cannot change here.

Availability is server-, permission-, and context-dependent; outside clients must supply explicit project/thread targets when required.

# `wait`

```elixir
@spec wait(T3.Client.t(), map()) :: {:ok, map()} | {:error, T3.Error.t()}
```

Wait for a thread's run to finish. No `runId`: latest. Idle: at once. On timeout, with `next` end your turn; without, call again.

Availability is server-, permission-, and context-dependent; outside clients must supply explicit project/thread targets when required.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
