ClaudeSDKClient.connect() with an async iterable closes stdin, so follow-up query() fails

Aperta Adatta ai principianti
#1,443 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 2 giorni

@m4xkushnir ci sta già lavorando.

Dal 25/10/2026.

  • #1444 di @m4xkushnir — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
68/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
python
Ambito
backend

Direzione di ricerca

Inizia leggendo ClaudeSDKClient.connect() e Query.stream_input(), che l’issue identifica come il percorso che chiude l’input quando l’iterabile termina; confrontalo con ClaudeSDKClient.query() usando un iterabile. Riproduci il problema con il generatore asincrono mostrato, poi verifica che connect(stream) mantenga la sessione disponibile per un query() successivo, preservando il comportamento di query() eseguito una sola volta.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug

Hi, I ran into this while sending an image as the first message of a ClaudeSDKClient session.

If I call connect() with a string, I can keep talking to the session with query() afterwards. If I call connect() with an async iterable instead, the session is over as soon as the iterable runs out, and the next query() raises CLIConnectionError: ProcessTransport is not ready for writing.

async def first_message():
    yield {"type": "user", "message": {"role": "user", "content": "Hi"}}

client = ClaudeSDKClient()
await client.connect(first_message())
async for msg in client.receive_response():
    print(msg)

await client.query("Follow-up")  # CLIConnectionError

The same thing with await client.connect("Hi") works fine, and so does connect() followed by query(first_message()).

From what I can tell, connect() hands the iterable to Query.stream_input(), which ends input once the stream is exhausted. That makes sense for one-shot query(), but for the client it closes stdin, the CLI exits, and nothing else can be sent. ClaudeSDKClient.query() with an iterable doesn't end input, so the two paths behave differently for the same kind of prompt.

I'd expect connect(stream) to behave like connect("text") and only open the session. Happy to send a PR if that sounds right to you.

Version 0.2.174 (current main), Python 3.13, macOS.

Lingua principale
Python
Stelle
8.5k
Fork
1.4k
Merge medio
3g 10h
PR unite (30g)
13

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di anthropics/claude-agent-sdk-python

Tutte le issue di anthropics/claude-agent-sdk-python

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.