Daemon Signal Feed
The Daemon is a background service that produces intelligence on its own — without anyone asking. On a fixed cycle it scrapes real-world data sources, turns what it finds into scored questions, has the Engine answer them, and stores the results. Those stored results are what you see on the Intelligence Terminal, and you can read them directly through the Daemon's HTTP API.
The Daemon is separate from the Engine. The Engine answers your questions on demand and charges per call (see Engine Inference). The Daemon generates its own questions on a schedule and exposes the results read-only. This page is about reading what the Daemon has already produced — it does not run inference for you.
Daemon API base URL (testnet): https://devnode.telegraphprotocol.com/daemon
What the Daemon Does
Every cycle (3 hours in production), the Daemon:
- Runs its Collectors — scrapers pointed at sources like Polymarket, GDELT, Reddit, Hacker News, and Open-Meteo.
- Scores the raw material into questions, each with a category and an interest score.
- Calls the Engine's
POST /engine/v1/askto answer each question (tagged as internal traffic, so these calls fund themselves through the node operator — they are not billed to you). - Writes the answered, scored results to its database (Postgres).
- Serves those results read-only over HTTP, and pushes new ones to WebSocket subscribers.
The result is a continuously growing feed of verified signals that exists whether or not any agent is actively paying for inference.
Each entry carries a signal_hash. Pass it to GET /engine/v1/signal/{hash} to fetch the signal, the payload it was hashed over, and a verification block you can re-derive yourself.
Reading the Feed
All Daemon endpoints are GET requests. They require no payment and no authentication — they are read-only views of data the Daemon already generated.
List signals
GET /daemon/api/questionsReturns a paginated list of signals. Each item is a stored result:
{
"results": [
{
"id": "ffe6880d-92f1-4d06-b6e0-e5216daf4d18",
"type": "daemon",
"source": "reddit",
"status": "success",
"created_at": "2026-06-26T18:42:11Z",
"signal_hash": "0x403644cc0dc53d5cc2ea097075c4a74445de8147a6368952200e8025fabb6525",
"question": {
"text": "Will Riyadh exceed 40°C in the next 24 hours?",
"category": "CLIMATE",
"interest_score": 7.4
},
"routing": {
"subnet_id": "18",
"subnet_name": "bittensor-sn18-zeus",
"miner_slug": "bittensor-sn18-zeus",
"reasoning": "Weather risk question — routed to Zeus for meteorological forecasting.",
"intent": "WEATHER_FORECAST"
},
"execution": {
"result": { "...miner output..." },
"cost_usd": 0.0021,
"duration_ms": 890
}
}
],
"total": 47,
"limit": 20,
"offset": 0
}Query parameters:
| Parameter | Notes |
|---|---|
category | One of POLITICS, ECONOMICS, GEOPOLITICS, TECHNOLOGY, CLIMATE, HEALTH, FINANCE, CRYPTO, SPORTS, SCIENCE, SOCIAL, AI, PHARMA, LAW, OTHER (case-insensitive). |
source | Collector name (reddit, gdelt, polymarket, hackernews, openmeteo, …), or user for rows persisted from direct Engine traffic. |
sort | recent (default), interest, affected, or audience. |
order | desc (default) or asc. |
since / until | RFC3339 timestamps filtering on created_at. |
since_hours | Shorthand for "now minus N hours". |
min_interest | 0–10. |
limit | 1–100, default 20. |
offset | ≥ 0, default 0. |
Top signals by interest
GET /daemon/api/questions/top?since_hours=1&limit=10Convenience endpoint that hard-sorts by interest score descending. Supports category, since_hours, and limit (1–50, default 10). This is the right endpoint for an "alerts" or "what's hot" view.
Categories
GET /daemon/api/categoriesReturns the full list of allowed categories plus per-category statistics from the database.
Health
GET /daemon/healthReturns {"status":"ok","time":"..."} when the Daemon is running.
Building on the Feed
- Browser dashboards: the Daemon allows GET from any origin (
Access-Control-Allow-Origin: *), so a frontend can read it directly. This is exactly how the Intelligence Terminal renders its feed. - Polling for alerts: poll
/daemon/api/questions/top?since_hours=1&min_interest=8on an interval to surface high-interest signals as they appear. - Live push instead of polling: subscribe over WebSocket to receive new signals as the Daemon produces them — see WebSocket Signals.
What This Is Not
- It is not on-demand inference. You cannot make the Daemon answer a question of yours here — use Engine Inference for that.
- The signals are already computed. You are reading a feed, not triggering work.
- Each row's
execution.cost_usdreflects what the underlying inference cost the node operator — it is not a charge to you.