HKUDS/Vibe-Trading · critical · ConnectionRefusedError
signal-cli daemon check returned status {response.status_cod
Error message
signal-cli daemon check returned status {response.status_code} What it means
The Signal HTTP-mode connector polls signal-cli's /api/v1/check endpoint at startup; a non-200 status means the daemon answered but is unhealthy.
Source
Thrown at agent/src/channels/signal.py:477
reconnect_delay_s = 1.0
max_reconnect_delay_s = 30.0
while self._running:
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")
View on GitHub (pinned to 80ffdda44c)
Solutions
- Verify signal-cli REST API: curl http://host:8080/api/v1/check
- Ensure signal-cli was started with 'signal-cli --config ... rest' and an account is registered
- Check signal_endpoint config points to the correct host:port
Defensive patterns
Strategy: retry
Validate before calling
import httpx
async with httpx.AsyncClient() as c:
r = await c.get(f"{endpoint}/api/v1/check")
assert r.status_code == 200, f'signal-cli check: {r.status_code}' Try / catch
try:
await signal_channel.start()
except ConnectionRefusedError as e:
# includes both 201 and 202 messages
log_and_alert(e); await asyncio.sleep(backoff); retry Prevention
- Add a readiness probe for signal-cli before app start
- Run signal-cli under a supervisor (systemd/docker restart)
When it happens
Trigger: Calling start() on the Signal channel in HTTP mode when signal-cli's REST API returns 4xx/5xx (e.g. unregistered number, wrong port serving something else).
Common situations: signal-cli running without an account registered, api mode not enabled (signal-cli -o json rest), or the URL pointing at a different service.
Related errors
- signal-cli daemon not responding: {e}
- Signal SSE stream ended unexpectedly
- SSE connection failed with status {response.status_code}
- group_message_buffer_size must be > 0
- signal-cli send failed: {response['error']}
AI-assisted analysis of HKUDS/Vibe-Trading@80ffdda44c (2026-08-28).
Data as JSON: /api/errors/c2d1d9d5f9a5ff47.
Report an issue: GitHub.