chenhg5/cc-connect · error
acp: write %s: %w
Error message
acp: write %s: %w
What it means
Raised by transport.call when serializing/writing a JSON-RPC request for the named method to the agent's stdin fails. It fires when the process stdin pipe is broken (agent exited) or the write is rejected; the pending entry is cleaned up and the whole call aborts.
Source
Thrown at agent/acp/rpc.go:189
func (t *transport) call(ctx context.Context, method string, params any) (json.RawMessage, error) {
id := t.nextID.Add(1)
key := fmt.Sprintf("%d", id)
ch := make(chan rpcOutcome, 1)
t.pendingMu.Lock()
t.pending[key] = ch
t.pendingMu.Unlock()
req := map[string]any{
"jsonrpc": "2.0",
"id": id,
"method": method,
"params": params,
}
if err := t.writeJSON(req); err != nil {
t.pendingMu.Lock()
delete(t.pending, key)
t.pendingMu.Unlock()
return nil, fmt.Errorf("acp: write %s: %w", method, err)
}
select {
case <-ctx.Done():
t.pendingMu.Lock()
delete(t.pending, key)
t.pendingMu.Unlock()
return nil, ctx.Err()
case out := <-ch:
if out.err != nil {
return nil, out.err
}
return out.result, nil
}
}
func (t *transport) sendNotification(method string, params any) error {
return t.writeJSON(map[string]any{
"jsonrpc": "2.0",View on GitHub (pinned to 4000b2338a)
Solutions
- Check whether the agent process is still alive before sending (session closed errors usually accompany this)
- Restart the session — a broken stdin pipe is not recoverable on the same transport
- Look for earlier errors explaining why the agent exited
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at agent/acp/rpc.go:189 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of chenhg5/cc-connect@4000b2338a (2026-09-06).
Data as JSON: /api/errors/ac0e1be61e48c385.
Report an issue: GitHub.