HKUDS/Vibe-Trading · critical · ConnectionRefusedError

signal-cli daemon not responding: {e}

Error message

signal-cli daemon not responding: {e}

What it means

Generic wrapper raised when the connection check to signal-cli raises any exception (connection refused, timeout, DNS failure); the original error is included in the message.

Source

Thrown at agent/src/channels/signal.py:481

            try:
                self.logger.info("Connecting to signal-cli daemon at {}...", base_url)

                # Create HTTP client
                self._http = httpx.AsyncClient(
                    timeout=self._HTTP_TIMEOUT_SECONDS, base_url=base_url
                )

                # Test connection
                try:
                    response = await self._http.get("/api/v1/check")
                    if response.status_code == 200:
                        self.logger.info("Connected to signal-cli daemon")
                    else:
                        raise ConnectionRefusedError(
                            f"signal-cli daemon check returned status {response.status_code}"
                        )
                except Exception as e:
                    raise ConnectionRefusedError(f"signal-cli daemon not responding: {e}")

                # Reset reconnect delay after successful connection check.
                reconnect_delay_s = 1.0

                # Ensure account-level typing indicators are enabled.
                await self._ensure_typing_indicators_enabled()

                # Start SSE receiver and supervise it. If it exits while we're still
                # running, treat it as a disconnect and reconnect.
                self._sse_task = asyncio.create_task(self._sse_receive_loop())
                await self._sse_task
                if self._running:
                    raise ConnectionError("Signal SSE stream ended unexpectedly")

            except asyncio.CancelledError:
                break
            except ConnectionRefusedError as e:
                self.logger.error(

View on GitHub (pinned to 80ffdda44c)

Solutions

  1. Start signal-cli in REST mode and confirm the port
  2. Fix signal_endpoint URL/port in config
  3. Check firewall/container network rules allowing the connection
Defensive patterns

Strategy: retry

Validate before calling

import socket, httpx
# fail fast if TCP is unreachable
socket.create_connection((host, port), timeout=3).close()

Try / catch

except ConnectionRefusedError as e:
    if 'not responding' in str(e):
        await asyncio.sleep(min(backoff, 60)); backoff *= 2; retry_start()

Prevention

When it happens

Trigger: start() in HTTP mode when /api/v1/check cannot be reached at all: daemon not running, wrong port, firewall, or TLS failure.

Common situations: signal-cli daemon not started, container networking misconfiguration, or signal_endpoint typo.

Related errors


AI-assisted analysis of HKUDS/Vibe-Trading@80ffdda44c (2026-08-28). Data as JSON: /api/errors/b18ff5ea9b811523. Report an issue: GitHub.