# feat\(server\): t3_thread_launch takes clientRequestId · pingdotgg/t3code

[View on GitCafe](https://git.cafe/pingdotgg/t3code/commit/6152622adc27258c06c4f9f5aa3b9f9a2064b9bb)

Repository: [pingdotgg/t3code](https://git.cafe/pingdotgg/t3code)

Visibility: public

Requested revision: 6152622adc27258c06c4f9f5aa3b9f9a2064b9bb

Requested commit: 6152622adc27258c06c4f9f5aa3b9f9a2064b9bb

Commit: 6152622adc27258c06c4f9f5aa3b9f9a2064b9bb

Tree: c79e2105efec3a801820c8401ce830ac6d7a406e

Author: Julius Marminge

Committer: Julius Marminge

## Message

```
feat(server): t3_thread_launch takes clientRequestId

A launch had no retry key, so an agent (or another environment calling on
its behalf) that lost the response could only guess whether the thread
was created, and a retry started a second one.

t3_thread_launch now takes an optional clientRequestId. The command,
thread and message ids derive from the caller and the key, and the launch
service already replays a command it accepted, so a retry returns the
first thread. Without a key every launch is new, as before.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

```

## Parents

- [76d6c7cd8f8ed3aa31e0ab389ad3716ce4e87297](https://git.cafe/pingdotgg/t3code/commit/76d6c7cd8f8ed3aa31e0ab389ad3716ce4e87297?format=markdown)

[Source at this commit](https://git.cafe/pingdotgg/t3code/tree/6152622adc27258c06c4f9f5aa3b9f9a2064b9bb?format=markdown)
